package com.mazaiting.generator.controller;

import com.mazaiting.common.core.domain.result.Option;
import com.mazaiting.common.core.ex.exceptions.BusinessException;
import com.mazaiting.generator.domain.form.CloneGroupForm;
import com.mazaiting.generator.domain.form.PropGroupForm;
import com.mazaiting.generator.domain.query.PropGroupQuery;
import com.mazaiting.generator.domain.vo.PropGroupVO;
import com.mazaiting.generator.service.IPropGroupService;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
* 属性组
*
* @author mazaiting
* @datetime 2022-11-14 23:40:13
*/
@Slf4j
@RestController
@RequestMapping("generator/v1/propGroup")
@RequiredArgsConstructor
public class PropGroupController {

    private final IPropGroupService propGroupService;

    /**
     * 分页数据
     * @param propGroupQuery 查询对象
     * @return 分页数据
     */
    @GetMapping("page")
    public BasePageVO<PropGroupVO> page(@Valid PropGroupQuery propGroupQuery){
        return propGroupService.page(propGroupQuery);
    }

    /**
     * 根据 ID 获取数据
     * @param id ID
     * @return 数据信息
     */
    @GetMapping("{id}")
    public PropGroupVO get(@PathVariable("id") Long id){
        return propGroupService.getInfoById(id);
    }

    /**
     * 保存数据
     * @param propGroupForm 表单信息
     * @return true: 新增成功; false: 新增失败
     */
    @PostMapping
    public boolean save(@Valid PropGroupForm propGroupForm){
        return propGroupService.save(propGroupForm);
    }

    /**
     * 修改数据
     * @param propGroupForm 表单信息
     * @return true: 修改成功; false: 修改失败
     */
    @PutMapping
    public boolean update(@Valid PropGroupForm propGroupForm){
        return propGroupService.update(propGroupForm);
    }

    /**
     * 删除修改数据
     * @param ids id 列表
     * @return true: 删除成功; false: 删除失败
     */
    @DeleteMapping
    public boolean delete(@RequestParam("ids") String ids){
        return propGroupService.deleteByIds(ids);
    }

    /**
     * 属性组下拉列表
     *
     * @return 属性组下拉列表
     */
    @GetMapping("/options")
    public List<Option<Long>> listOptions() throws BusinessException {
        return propGroupService.listOptions();
    }

    /**
     * 克隆组
     * @param cloneGroupForm 克隆组表单
     * @return true: 克隆成功; false: 克隆失败
     */
    @PostMapping("clone")
    public boolean cloneGroup(@Valid CloneGroupForm cloneGroupForm) {
        return propGroupService.cloneGroup(cloneGroupForm);
    }
}